/**
 * @author Jean-Baptiste HAENTJENS
 * @date 17 septembre 2010
 * public interface List<E>, ce qui permettra de gerer des listes de n'importe quel 
 * type d'element, que cela soit des String ou des classes definies par l'utilisateur 
 * lui-meme. Mais il faut que le type E dispose d'une implementation serieuse de la 
 * methode equals.
 */
package td1.List;

public interface List<E> {
	
	/**
	 *  Ajout d'un element de type E dans la liste. Renvoie vrai si l'insertion a reussi.
	 * @param e element a inserer
	 * @return true si l'element a bien ete insere 
	 */
	boolean add(E e);
	
	/**
	 * Ajoute un element a la position indiquee dans la liste. Si la position est 
	 * superieur a la taille actuelle de la liste, ajoute l'element a la n. 
	 * Si la position est inferieur a l'indice du premier element, ajoute l'element
	 * au debut.
	 * @param index position
	 * @param e element a inserer
	 */	
	void add(int index, E e);
	
	/**
	 * @param o objet a tester
	 * @return Renvoie vrai si l'element specifie fait partie de la liste.
	 */
	boolean contains(Object o);
	
	/**
	 * Renvoie le premier element de la liste.
	 * @return
	 */
	E getFirst();
	
	/**
	 * Renvoie le dernier element de la liste.
	 * @return
	 */
	E getLast();
	
	/**
	 * Renvoie l'element a la position specifiee.
	 * @param index position 
	 * @return
	 */
	E get(int index);
	
	/**
	 * Renvoie le prochain element de la premiere occurrence de l'element specifie.
	 * @param o
	 * @return
	 */
	E getNext(Object o);
	
	/**
	 * Renvoie le prochain element de la position specifiee.
	 * @param index
	 * @return
	 */
	E getNext(int index);
	
	/**
	 * Renvoie l'element precedent de la premiere occurrence de l'element specifie.
	 * @param o
	 * @return
	 */
	E getPrevious(Object o);
	
	/**
	 * Renvoie l'element precedent de la position specifiee.
	 * @param index position
	 * @return
	 */
	E getPrevious(int index);
	
	/**
	 * Renvoie la position de la premiere occurrence de l'element specifiee, 
	 * -1 si l'element ne fait pas partie de la liste.
	 * @param o element specifie
	 * @return
	 */
	int indexOf(Object o);
	
	/**
	 * Renvoie vrai si la liste ne contient aucun element.
	 * @return
	 */
	boolean isEmpty();
	
	/**
	 * Suppression d'un element de la liste. Renvoie vrai si la suppression a reussi.
	 * @param o element a supprimer
	 * @return Renvoie vrai si la suppression a reussi.
	 */
	boolean remove(Object o);
	
	/**
	 * Suppression d'un element de la liste, a la position specifiee. Renvoie l'element 
	 * si la position specifiee est valide, null sinon.
	 * @param index position specifie
	 * @return Renvoie l'element si la position specifiee est valide, null sinon.
	 */
	E remove(int index);
	
	/**
	 * Remplace l'element a la position specifiee avec l'element specifie. 
	 * @param index
	 * @param e
	 * @return Renvoie l'element remplace si l'indice est valide, null sinon.
	 */
	E set(int index, E e);
	
	/**
	 * Renvoie le nombre d'elements dans la liste.
	 * @return nombre d'elements dans la liste.
	 */
	int size();
	
	/**
	 * Renvoie la sous-liste comprise entre la position fromIndex inclue et la 
	 * position toIndex exclue.
	 * @param fromIndex premiere position
	 * @param toIndex derniere position
	 * @return liste d'element
	 */
	List<E> subList(int fromIndex, int toIndex);
	
}
